﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Samples.ServiceHosting.StorageClient;
using ZeCloud.Resto55.Business.Table;


namespace ZeCloud.Resto55.Business
{
    public class BusinessFacade
    {
        StorageAccountInfo info = null;
        RetryPolicy policy = null;
        static BusinessFacade instance = null;
    

        public static BusinessFacade CreerFacade() 
        {
            if (instance == null)
            {
                var accountInfo = StorageAccountInfo.GetAccountInfoFromConfiguration("TableStorageEndpoint");
                if (accountInfo == null)
                {
                    return null;
                }


                instance = new BusinessFacade(accountInfo);
            }
            return instance;
        }

        internal BusinessFacade(StorageAccountInfo in_info) {
            info = in_info;

            policy = RetryPolicies.RetryN(3, TimeSpan.FromSeconds(1));

            // Create tables for Services
            TableStorage.CreateTablesFromModel(typeof(RestoService), info);
        }

        /** Recommandation : Créer une nouvelle instance à chaque fois que vous initiez un nouveau dialogue avec Azure
         * sans quoi le contexte de la requête précédente est conservée en mémoire (propriété de ADO.Net Data Services
         * Ce qui peut poser rapidement des pbs de taille d'objets trackés en mémoire et de perfs et de pb de concurrence d'accès
         */
        public RestoService GetRestoService() {
            return new RestoService(info, policy);
        }

    }
}
